#include "elemGen.H"
#include "NombreComplexe.H"
#include "Reel.H"

#include <cstdio>

///fonctions et procedures pour le type entier
void initialisation_int (Element & e)
{
  e = new int;
  *((int *)e) = 0;
}

void affectation_int(Element & e, int i)
{
  *((int *)e) = i;
}

void affectation_element_int(Element & e1, Element e2)
{
  if (e1 != e2)
    {
      *((int *)e1) = *((int *)e2);
    }
}

void initialisation_element_int(Element & e1, Element e2)
{
  initialisation_int(e1);
  affectation_element_int(e1, e2);
}

void affiche_int(Element e)
{
  printf("l'element e a pour valeur %d \n", *((int *)e));
}

void testament_int(Element & e)
{
  delete (int *)e;
  e = NULL;
}

bool est_inferieur_int(Element e1, Element e2)
{
  if (*((int *)e1) < *((int *)e2))
    {
      return 1;
    }
  else
    {
      return 0;
    }
}

bool est_superieur_int(Element e1, Element e2)
{
  if (*((int *)e1) > *((int *)e2))
    {
      return 1;
    }
  else
    {
      return 0;
    }
}

bool est_egal_int(Element e1, Element e2)
{
  if (*((int *)e1) == *((int *)e2))
    {
      return 1;
    }
  else
    {
      return 0;
    }
}



///fonctions et procedures pour le type double
void initialisation_double(Element & e)
{
  e = new double;
  *((double *)e) = 0.0;
}

void affectation_double(Element & e, double d)
{
  *((double *)e) = d;
}

void affectation_element_double(Element & e1, Element e2)
{
  if (e1 != e2)
    {
      *((double *)e1) = *((double *)e2);
    }
}

void initialisation_element_double(Element & e1, Element e2)
{
  initialisation_double(e1);
  affectation_element_double(e1,e2);
}

void affiche_double(Element e)
{
  printf("la valeur de l'element de type effectif double est %f \n", *((double *)e));
}

void testament_double(Element & e)
{
  delete (double *)e;
  e = NULL;
}

bool est_inferieur_double(Element e1, Element e2)
{
  if (*((double *)e1) < *((double *)e2))
    {
      return 1;
    }
  else
    {
      return 0;
    }
}

bool est_superieur_double(Element e1, Element e2)
{
  if (*((double *)e1) > *((double *)e2))
    {
      return 1;
    }
  else
    {
      return 0;
    }
}

bool est_egal_double(Element e1, Element e2)
{
  if (*((double *)e1) == *((double *)e2))
    {
      return 1;
    }
  else
    {
      return 0;
    }
}




void initialisation_complexe(Element & e)
{
  e = new Complexe;
  ((Complexe *)e)->x = 0;
  ((Complexe *)e)->y = 0;
}

void affectation_complexe(Element & e, Complexe c)
{
  ((Complexe *)e)->x = c.x;
  ((Complexe *)e)->y = c.y;
}

void affiche_complexe(Element e)
{
  printf("on affiche le nombre complexe %f+i*%f \n", ((Complexe *)e)->x, ((Complexe *)e)->y);
}

void affectation_element_complexe(Element & e1,Element e2)
{
  ((Complexe *)e1)->x = ((Complexe *)e2)->x;
  ((Complexe *)e1)->y = ((Complexe *)e2)->y;
}

void initialisation_element_complexe(Element & e1, Element e2)
{
  initialisation_complexe(e1);
  affectation_element_complexe(e1,e2);
}

void testament_complexe(Element & e)
{
  delete (Complexe *)e;
  e=NULL;
}
